草庐IT

leetcode 算法第三集

全部标签

十大排序算法(冒泡排序、插入排序、选择排序、希尔排序、堆排序、快排、归并排序、桶排序、计数排序、基数排序)

目录一、冒泡排序:二、插入排序:三、选择排序:四、希尔排序:五、堆排序:六、快速排序:6.1挖坑法:6.2左右指针法6.3前后指针法:七、归并排序:八、桶排序:九、计数排序:9.1绝对映射:9.2现对映射:十、基数排序: 一、冒泡排序:1、思路:通过对待排序序列从前向后(从下标较小的元素开始),依次对相邻两个元素的值进行两两比较,若发现前一个数大于后一个数则交换,使值较大的元素逐渐从前移向后部,就如果水底下的气泡一样逐渐向上冒。2、先以一个数组讲解一下,然后再写代码:   待排序数组:3,9,-1,10,20    第一轮排序:    (1)3,9,-1,10,20   ----3跟9比较,不

宽度优先搜索算法(BFS)

宽度优先搜索算法(BFS)是什么?宽度优先搜索算法(BFS)(也称为广度优先搜索)主要运用于树、图和矩阵(这三种可以都归类在图中),用于在图中从起始顶点开始逐层地向外探索,直到找到目标顶点为止。在本篇文章中,我们主要讨论其在树中的运用树的宽度优先搜索树的宽度优先搜索即树的层序遍历:逐层访问树的节点,并按照层级顺序输出节点的值。从树的根节点开始,逐层向下遍历,先访问当前层的所有节点,然后再访问下一层的节点,依次类推直到遍历完整棵树其过程如下图所示:如何实现树的层序遍历呢?我们在遍历每一层节点时,都是从左向右依次遍历的,即先遍历上一层节点中的第一个节点的孩子节点,即优先遍历前面的节点,此时,满足“

代码随想录算法训练营第四天|24.两两交换链表中的节点、19.删除链表的倒数第N个结点、面试题02.07.链表相交、142.环形链表ii

文档讲解双指针哈希表哨兵结点循环不变式核心:对于反转链表的问题,使用的pre和cur这两个指针,反转开始之前一定是pre指向上一段的最后一个节点,而cur指向即将反转链表的头节点,这就是所谓的循环不变式。那么又有一个问题,怎么保持住链表不断连呢?我们需要保存一个节点的信息,那就是要反转的链表前一个结点的信息,保存在P0中,这又有一个问题,例如昨天做的反转整个链表的问题,从第一个结点就开始反转,那P0去保存什么呢?故这个时候需要引入哨兵结点,P0保存它的信息。24.两两交换链表中的节点思路:这道题可以把两个结点看成一个子链表,即我们翻转一个链表,其大小为2,那么从上面就很清晰的看出需要两个指针,

C语言第三十七弹---文件操作(下)

✨个人主页: 熬夜学编程的小林💗系列专栏: 【C语言详解】 【数据结构详解】文件操作1、文件的随机读写1.1、fseek1.2、ftell1.3、rewind2、文件读取结束的判定2.1、被错误使用的feof3、文件缓冲区总结1、文件的随机读写1.1、fseek根据文件指针的位置和偏移量来定位文件指针。将与流关联的位置指示器设置为新位置。对于以二进制模式打开的流,通过向原点指定的参考位置添加偏移来定义新位置。对于以文本模式打开的流,偏移量应为零或上一次调用ftell返回的值,并且origin必须为SEEK_SET。intfseek(FILE*stream,longintoffset,intor

[数据结构和算法02]约瑟夫环问题看这篇就够了!!!

本来第二期是要更新排序的,但是发现明天学校的算法课实验是有关约瑟夫问题的,这个问题还蛮有意思的,觉得可以加更一期,话不多说,开始!一.什么是约瑟夫问题已知n个人(以编号1,2.3..n分别表示)围坐在一张圆桌周围。从编号为K的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到只剩下一个人为止。以上这个问题就是约瑟夫环,我们的目标是找到剩下的那一个人,其实这个问题很常见,某些桌游就是这样的(具体是哪个忘记了);再比如丢手帕,也是围成一个圈然后不断地传递手帕,其实这都是约瑟夫环问题;解决这个问题的数据结构实际上就是一个单向链表,不过和普通的单向

[Java·算法·简单] LeetCode 392. 判断子序列 详细解读

 人不走空                                          🌈个人主页:人不走空      💖系列专栏:算法专题⏰诗词歌赋:斯是陋室,惟吾德馨  题目给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的S,称作S1,S2,...,Sk其中k>=10亿,你需要依次检查它们是否为T的子序列。在这种情况下,你会怎样改变代码? 示例示例1输入:s="abc",t="ahbgdc

【刷题】Leetcode 415 字符串相加 和 34 字符串相乘

刷题Leetcode415字符串相加题目描述思路一(模拟大法版!!!)Leetcode34字符串相乘题目描述思路一(模拟大法版)Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!!Leetcode415字符串相加题目描述逻辑很简单,对应位置相加,并进位即可。思路一(模拟大法版!!!)本题我们只需要对两个大整数模拟「竖式加法」的过程。竖式加法就是我们平常学习生活中常用的对两个整数相加的方法,回想一下我们在纸上对两个整数相加的操作,是不是将相同数位对齐,从低到高逐位相加,如果当前位和超过10,则向高位进一位?因此我们只要将这个过程用代码写出来即可。classSolution{public:s

java - 在 O(log(N)) 时间内查找排序数组中一定范围内的整数数量的高效算法?

我遇到了一个必须在O(logn)中完成的面试题给定一个排序的整数数组和一个数字,找到数组中数字的开始和结束索引。Ex1:Array={0,0,2,3,3,3,3,4,7,7,9}andNumber=3-->Output={3,6}Ex2:Array={0,0,2,3,3,3,3,4,7,7,9}andNumber=5-->Output={-1,-1}我正试图为此找到一个有效的算法,但一直没有成功。 最佳答案 您可以使用二进制搜索的概念来查找开始和结束索引:要找到起始索引,将数组减半,如果值等于或大于输入数字,则重复数组的下半部分,否

【leetcode】 剑指 Offer学习计划(java版本含注释)(下)

目录前言第十六天(排序)剑指Offer45.把数组排成最小的数(中等)剑指Offer61.扑克牌中的顺子(简单)第十七天(排序)剑指Offer40.最小的k个数(简单)第十八天(搜索与回溯算法)剑指Offer55-I.二叉树的深度(简单)剑指Offer55-II.平衡二叉树(简单)*第十九天(搜索与回溯算法)剑指Offer64.求1+2+…+n(中等)剑指Offer68-I.二叉搜索树的最近公共祖先(简单)剑指Offer68-II.二叉树的最近公共祖先(简单)*第二十天(分治算法)剑指Offer07.重建二叉树(中等)*第二十一天(位运算)剑指Offer15.二进制中1的个数(简单)剑指Off

java - 遗传算法锦标赛选择

我正在编写一个遗传算法,我打算从轮盘赌选择转向锦标赛选择,但我怀疑我的理解可能有缺陷。如果我只选择种群中的n/2个最佳解决方案,我肯定会很快用完种群吗?我对算法的理解是:for(MembermincurrentPopulation){MemberrandomMember1=randommemberofcurrentPopulationwhichisthenremovedfromcurrentPopulationMemberrandomMember2=asabove;//Mutateandcrossoverif(randomMember1.getScore()>randomMember2